unit DuplicataPagDM;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ZDataset, ZSqlUpdate, ZSequence, MainDM, QueryConditions, DB;

type

  { TDuplicataPagData }

  TDuplicataPagData = class(TMainDataModule)
    DuplicataPagDatasource: TDatasource;
    DuplicataPagZQuerydata_pagamento: TDateField;
    DuplicataPagZQuerydata_vencimento: TDateField;
    DuplicataPagZQuerydesconto: TFloatField;
    DuplicataPagZQueryid_conta: TLargeintField;
    DuplicataPagZQueryid_duplicata_pagar: TLargeintField;
    DuplicataPagZQueryid_entrada: TLargeintField;
    DuplicataPagZQueryid_fornecedor: TLargeintField;
    DuplicataPagZQueryid_plano_conta: TLargeintField;
    DuplicataPagZQueryjuros: TFloatField;
    DuplicataPagZQuerynome_pessoa: TStringField;
    DuplicataPagZQuerynota: TStringField;
    DuplicataPagZQueryparcela: TLargeintField;
    DuplicataPagZQuerystatus: TStringField;
    DuplicataPagZQueryvalor: TFloatField;
    DuplicataPagZQueryvalor_pago: TFloatField;
    DuplicataPagZSequence: TZSequence;
    DuplicataPagZUpdate: TZUpdateSQL;
    DuplicataPagZQuery: TZQuery;
    AuxiliarZQuery: TZQuery;
    VendaCaixaZQuerydesconto: TFloatField;
    VendaCaixaZQueryid_caixa: TLargeintField;
    VendaCaixaZQueryid_venda: TLargeintField;
    VendaCaixaZQuerysigla_forma_pagamento: TStringField;
    VendaCaixaZQuerytipo_cartao: TStringField;
    VendaCaixaZQueryvalor: TFloatField;
    procedure DataModuleCreate(Sender: TObject);
    /// Abre o DataSet
    procedure OpenDataSet(); override;
    /// Fecha o DataSet
    procedure CloseDataSet(); override;
    /// Realiza busca
    /// @param(Condicoes são as condições para a busca)
    /// @param(Tabela é a tabela no banco de dados)
    procedure Search(Condicoes: TQueryConditions; Tabela: string); override;
    function BuscaIDCaixa(): string;
    function BuscaDuplicata(IdDuplicata: integer; Parcela: integer): boolean;
    procedure CancelaDuplicata(IdDuplicata: integer; Parcela: integer);
    procedure InsereBaixaDuplicata(Parcela: integer; DataPagamento: TDate;
      Desconto: real; Juros: real; ValorPago: real; IDduplicata: integer);
    function BuscaData(): string;
    procedure InsereBaixaConta(ValorPago:string;IDConta:string;PlanoConta:string;IDUsuario:string;IDCaixa:string);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  DuplicataPagData: TDuplicataPagData;

implementation

uses ConnectionDM;

{ TDuplicataPagData }


procedure TDuplicataPagData.DataModuleCreate(Sender: TObject);
begin
  MainDataSet := DuplicataPagZQuery;
end;

procedure TDuplicataPagData.OpenDataSet;
begin
  ConnectionData.EmptyQuery(DuplicataPagZQuery, 'duplicata_pagar');
end;

procedure TDuplicataPagData.CloseDataSet;
begin
  DuplicataPagZQuery.Close();
end;

procedure TDuplicataPagData.Search(Condicoes: TQueryConditions; Tabela: string);
begin
  ConnectionData.OpenQueryConditions(DuplicataPagZQuery, Tabela, Condicoes);
end;

function TDuplicataPagData.BuscaIDCaixa(): string;
var
  IDCaixa: string;
begin
  with AuxiliarZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('Select id_caixa_movimentacao from caixa_movimentacao where status=:status');
    ParamByName('status').AsString := 'A';
    Open();
    Edit();
    if RecordCount > 0 then begin
      IDCaixa := FieldByName('id_caixa_movimentacao').AsString;
      Result := IDCaixa;
    end else begin
      Result := '';
    end;
  end;
end;

function TDuplicataPagData.BuscaDuplicata(IdDuplicata: integer;
  Parcela: integer): boolean;
begin
  with DuplicataPagZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT p.nome_pessoa, dp.* FROM duplicata_pagar as dp, pessoa as p ');
    SQL.Add('WHERE dp.id_duplicata_pagar=:id_duplicata_pagar AND dp.parcela=:parcela AND dp.id_fornecedor = p.id_pessoa');
    ParamByName('id_duplicata_pagar').AsInteger := IdDuplicata;
    ParamByName('parcela').AsInteger := Parcela;
    Open();
    if RecordCount > 0 then begin
      Result := True;
    end else begin
      Result := False;
    end;
  end;
end;

procedure TDuplicataPagData.CancelaDuplicata(IdDuplicata: integer;
  Parcela: integer);
begin
  with AuxiliarZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('UPDATE duplicata_pagar');
    SQL.Add('SET status =:status, data_pagamento = current_date, valor_pago = valor');
    SQL.Add('WHERE id_duplicata_pagar=:id_duplicata_pagar AND parcela =:parcela');
    ParamByName('status').AsString := 'C';
    ParamByName('id_duplicata_pagar').AsInteger := IDduplicata;
    ParamByName('parcela').AsInteger := Parcela;
    ExecSQL();
  end;
  with DuplicataPagZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT * FROM');
    SQL.Add('duplicata_pagar');
    SQL.Add('WHERE id_duplicata_pagar=:id_duplicata_pagar AND parcela =:parcela');
    ParamByName('id_duplicata_pagar').AsInteger := IDduplicata;
    ParamByName('parcela').AsInteger := Parcela;
    Open();
  end;
end;

procedure TDuplicataPagData.InsereBaixaDuplicata(Parcela: integer;
  DataPagamento: TDate; Desconto: real; Juros: real; ValorPago: real;
  IDduplicata: integer);
begin
  with AuxiliarZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('UPDATE duplicata_pagar');
    SQL.Add('SET data_pagamento =:data, desconto =:desconto, juros=:juros, valor_pago =:valor_pago, status =:status');
    SQL.Add('WHERE id_duplicata_pagar=:id_duplicata_pagar AND parcela =:parcela');
    ParamByName('status').AsString := 'Q';
    ParamByName('data').AsDate := DataPagamento;
    ParamByName('desconto').AsFloat := Desconto;
    ParamByName('juros').AsFloat := Juros;
    ParamByName('valor_pago').AsFloat := ValorPago;
    ParamByName('id_duplicata_pagar').AsInteger := IDduplicata;
    ParamByName('parcela').AsInteger := Parcela;
    ExecSQL();
  end;
  with DuplicataPagZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT * FROM');
    SQL.Add('duplicata_pagar');
    SQL.Add('WHERE id_duplicata_pagar=:id_duplicata_pagar AND parcela =:parcela');
    ParamByName('id_duplicata_pagar').AsInteger := IDduplicata;
    ParamByName('parcela').AsInteger := Parcela;
    Open();
  end;
end;

function TDuplicataPagData.BuscaData(): string;
var
  Data: string;
begin
  with AuxiliarZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT current_date as date');
    Open();
    Data := FieldByName('date').AsString;
    Result := Data;
  end;
end;

procedure TDuplicataPagData.InsereBaixaConta(ValorPago: string;
  IDConta: string; PlanoConta: string; IDUsuario: string; IDCaixa: string);
begin
    with AuxiliarZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('INSERT INTO plano_conta_movimentacao(id_conta,id_plano_conta,id_usuario,valor,id_caixa_movimentacao)');
    SQL.Add('VALUES(:id_conta,:id_plano_conta,:id_usuario,:valor,:id_caixa_movimentacao);');
    ParamByName('id_conta').AsString:=IDConta;
    ParamByName('id_plano_conta').AsString:=PlanoConta;
    ParamByName('id_usuario').AsString:=IDUsuario;
    ParamByName('valor').AsString:=ValorPago;
    ParamByName('id_caixa_movimentacao').AsString:=IDCaixa;
    ExecSQL();
  end;
    with AuxiliarZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('UPDATE conta');
    SQL.Add('SET saldo=saldo-:valor_pago where id_conta=:id_conta');
    ParamByName('id_conta').AsString:=IDConta;
    ParamByName('valor_pago').AsString:=ValorPago;
    ExecSQL();
  end;
end;

initialization
  {$I duplicatapagdm.lrs}

end.
